﻿#ifndef WRWORKTCPCOMMSERVEROBJREF
#define WRWORKTCPCOMMSERVEROBJREF

#include "../WRWorkObject.h"
#include "WRWorkTcpCommServerInterfaceActivator.h"

//声明工作TCP通讯服务器接口。
class WRWorkTcpCommServerInterface;

//表示工作TCP通讯服务器对象引用。
class WRWorkTcpCommServerObjRef
{
private:
    //表示接口。
    class Interface
    {
    private:
        QUuid m_uuid;
        void *m_reference;
        WRWorkTcpCommServerInterfaceActivator* m_activator;

    public:
        //初始化接口。
        inline Interface(void)
            : m_reference(0), m_activator(0)
        {
            //add code here
        }
        //初始化接口。
        inline Interface(const QUuid& uuid, void* reference, WRWorkTcpCommServerInterfaceActivator* activator)
            : m_uuid(uuid), m_reference(reference), m_activator(activator)
        {
            //add code here
        }

        //改变接口信息。
        inline void change(const QUuid& uuid, void* reference, WRWorkTcpCommServerInterfaceActivator* activator)
        {
            m_uuid = uuid;
            m_reference = reference;
            m_activator = activator;
        }

        //获取接口标识。
        inline const QUuid& uuid(void) const
        {
            return m_uuid;
        }
        //获取接口引用。
        inline const void* reference(void) const
        {
            return m_reference;
        }
        //获取接口激活器。
        inline WRWorkTcpCommServerInterfaceActivator* activator(void) const
        {
            return m_activator;
        }

        //创建实例。
        inline WRWorkTcpCommServerInterface* create(int index, WRWorkTcpCommServerObject* target)
        {
            return m_activator->create(index, target, m_reference);
        }
    };

    WRWorkObject* m_value;
    int m_index;
    int m_iiLen;
    Interface m_iiArr[256];
    WRWorkTcpCommServerObjRef* m_parent;

public:
    //初始化对象引用。
    WRWorkTcpCommServerObjRef(int index, WRWorkObject* value, WRWorkTcpCommServerObjRef* parent = nullptr);

    //获取对象索引。
    inline int index(void) const
    {
        return m_index;
    }
    //获取目标对象。
    inline WRWorkObject* value(void) const
    {
        return m_value;
    }

    //获取父类对象对象。
    inline WRWorkTcpCommServerObjRef* parent() const
    {
        return m_parent;
    }

    //查询指定索引的接口。
    WRWorkTcpCommServerInterface* queryInterface(int index, WRWorkTcpCommServerObject* target);
    //查询指定标识的接口。
    WRWorkTcpCommServerInterface* queryInterface(const QUuid &uuid, WRWorkTcpCommServerObject* target);

    //查询指定标识的工作处理者。
    WRWorkTcpCommServerInterface* queryWorkDealer(const QUuid &uuid, WRWorkTcpCommServerObject* target);
    //查询指定标识的任务处理者。
    WRWorkTcpCommServerInterface* queryTaskDealer(const QUuid& uuid, WRWorkTcpCommServerObject* target);
    //查询指定标识的数据源接口。
    WRWorkTcpCommServerInterface* queryDataSource(const QUuid& uuid, WRWorkTcpCommServerObject* target);
    //查询指定标识的事件源接口。
    WRWorkTcpCommServerInterface* queryEventSource(const QUuid& uuid, WRWorkTcpCommServerObject* target);
    //查询指示标识的状态源接口。
    WRWorkTcpCommServerInterface* queryStateSource(const QUuid& uuid, WRWorkTcpCommServerObject* target);
};

#endif // WRWORKTCPCOMMSERVEROBJREF
